package org.itboys.mobile.service;

import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.itboys.commons.utils.time.TimeUtils;
import org.itboys.commons.utils.tools.LongUtil;
import org.itboys.kitchen.dao.order.KitchenOrderMapper;
import org.itboys.kitchen.entity.mysql.order.KitchenOrder;
import org.itboys.mobile.dao.report.KitchenReportMapper;
import org.itboys.mobile.util.DatetUtil;
import org.itboys.param.PageResult;
import org.itboys.param.ParamUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 作者：jiangxiong
 * 日期：2017年5月8日
 * 联系方式 ：empty90911@126.com
 * 描述：农厨_后台_报表_service
 */
@Service
public class KitchenReportService {
    @Autowired
    private KitchenReportMapper reportMapper;
  /*  @Autowired
    private KitchenOrderMapper orderMapper;*/


    /**
     * 查询销售/采购/积分报表数据
     * @param request
     * @return
     */
    public Map<String,Object> sale(HttpServletRequest request){
       Map<String,Object> result = new HashMap();
       //返回的门店数据，内含门店名称和数据
        List<Map<String,Object>> shops = new ArrayList<Map<String,Object>>();
        //日期去重
        List<String> cts = new ArrayList<String>();
        Map<String,Object> param =new HashMap<String,Object>();
        //分组标识。//1，按天/店（大客户），2，按月/店（大客户），3按年/店（大客户），4，按天，5，按月，6按年，7，按店（大客户）
        Integer groupType= StringUtils.isNotEmpty(request.getParameter("groupType"))? Integer.valueOf(request.getParameter("groupType")):null;
        //订单类型1，商城，2积分，3采购
        int type = 0;
        if(StringUtils.isNotEmpty(request.getParameter("type"))){
            type=Integer.valueOf(request.getParameter("type"));
           // param.put("type",type);
        }
        if(groupType!=null){
            String ctFormartSql="\"%Y-%m-%d\"";
            String groupBySql="DATE_FORMAT(ct, \"%Y-%m-%d\" )";
           // //1，按天/店，2，按月/店，3按年/店
            if(groupType==1||groupType==2||groupType==3){
                Date dayStart = new Date();
                dayStart= DatetUtil.setDateStart(dayStart);
                Date dayEnd = new Date();
                dayEnd= DatetUtil.setDateEnd(dayEnd);
                if(groupType==1){
                    ctFormartSql="\"%Y-%m-%d\"";
                    groupBySql="DATE_FORMAT(ct, \"%Y-%m-%d\" )";
                    //最近30天
                    dayStart.setDate(dayStart.getDate()-30);
                    //最近12个月
                }else if(groupType==2){
                    ctFormartSql="\"%Y-%m\"";
                    groupBySql="DATE_FORMAT(ct, \"%Y-%m\" )";
                    dayStart.setMonth(dayStart.getMonth()-11);
                    //最近3年
                }else if(groupType==3){
                    ctFormartSql="\"%Y\"";
                    groupBySql="DATE_FORMAT(ct, \"%Y\" )";
                    //最近3年
                    dayStart.setYear(dayStart.getYear()-2);
                }

               // dayEnd.setDate(dayEnd.getDate()+15);
                param.put("ctStart",TimeUtils.formatToTime(dayStart));
                param.put("ctEnd",TimeUtils.formatToTime(dayEnd));
               // List<Map<String,Object>>=reportMapper.sale(param);
                param.put("ctFormartSql",ctFormartSql);
                param.put("groupBySql",groupBySql);
                //构建X轴（日期）
                cts=reportMapper.sale_group_by(param);
                //获取个门店销售/采购数据
                param.clear();
                param.put("ctStart",TimeUtils.formatToTime(dayStart));
                param.put("ctEnd",TimeUtils.formatToTime(dayEnd));
                if(type!=0){
                    param.put("type",type);
                }
                //匹配消费者（积分），销售（门店），采购（门店/大客户）的ID集合
                List<KitchenOrder> orders  = reportMapper.select_order(param);
                Set<Long> memberOrShopIds = new HashSet<Long>();
                for(KitchenOrder order:orders){
                    //订单类型1，商城销售（门店），2积分,消费者（积分），3采购（门店/大客户）
                    if(type==1&&LongUtil.isNotZreo(order.getShopId())){
                        memberOrShopIds.add(order.getShopId());
                    }else if(type==2&&LongUtil.isNotZreo(order.getMemberId())){
                        memberOrShopIds.add(order.getMemberId());
                    }else if(type==3&&LongUtil.isNotZreo(order.getMemberId())){
                        memberOrShopIds.add(order.getMemberId());
                    }


                }
                if(memberOrShopIds.size()<=0)return result;



                for(Long memberOrShopId:memberOrShopIds){
                    //返回一组门店数据。含门店名称和销售数据数据
                    Map<String,Object> shop = new HashMap<String,Object>();
                    //门店，消费者，采购人名称
                    String memberOrShopName="";
                    //销售数据
                    List<Double> datas = new ArrayList<Double>();
                    Double data = 0.00;
                    int i=0;
                    for(String ct:cts){
                        //此时Ct中时间格式为 2017-06-29。

                        for(KitchenOrder order:orders){
                            //积分和采购
                            if(type==2||type==3){
                                if( LongUtil.isNotZreo(order.getMemberId())&&memberOrShopId.longValue()==order.getMemberId()&&
                                        (
                                                (groupType==1&& TimeUtils.format(order.getCt(),"yyyy-MM-dd").equalsIgnoreCase(ct))||
                                                        (groupType==2&& TimeUtils.format(order.getCt(),"yyyy-MM").equalsIgnoreCase(ct))||
                                                        (groupType==3&& TimeUtils.format(order.getCt(),"yyyy").equalsIgnoreCase(ct))
                                        )){

                                    memberOrShopName=order.getMemberName();
                                    data+=order.getPayAmount().doubleValue();

                                    data=new BigDecimal(data).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
                                }
                            //销售

                            }else if(type==1){
                                if( LongUtil.isNotZreo(order.getShopId())&&memberOrShopId.longValue()==order.getShopId()&&
                                        (
                                                (groupType==1&& TimeUtils.format(order.getCt(),"yyyy-MM-dd").equalsIgnoreCase(ct))||
                                                        (groupType==2&& TimeUtils.format(order.getCt(),"yyyy-MM").equalsIgnoreCase(ct))||
                                                        (groupType==3&& TimeUtils.format(order.getCt(),"yyyy").equalsIgnoreCase(ct))
                                        )){


                                    memberOrShopName=order.getShopName();
                                    data+=order.getPayAmount().doubleValue();
                                    if(order.getBalancePayAmount()!=null){
                                        data+=order.getBalancePayAmount().doubleValue();
                                    }
                                    if(order.getCouponAmount()!=null){
                                        data+=order.getCouponAmount().doubleValue();
                                    }
                                    data=new BigDecimal(data).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
                                }
                            }else{

                            }

                        }
                        datas.add(data);
                        i++;
                    }
                    //返回符合前端格式的数据
                  //  System.out.println("--门店名称--"+shopName+"-销售数据="+i);
                    shop.put("name",memberOrShopName);
                    shop.put("data",datas);
                    shops.add(shop);

                }
                //4，按天,5,按月，6按年，7按店
            }else if(groupType==4||groupType==5||groupType==6||groupType==7){
                Date dayStart = new Date();
                dayStart= DatetUtil.setDateStart(dayStart);
                Date dayEnd = new Date();
                dayEnd= DatetUtil.setDateEnd(dayEnd);
                if(groupType==4){
                    ctFormartSql="\"%Y-%m-%d\"";
                    groupBySql="DATE_FORMAT(ct, \"%Y-%m-%d\" )";
                    //最近30天
                    dayStart.setDate(dayStart.getDate()-30);
                    //最近12个月
                }else if(groupType==5){
                    ctFormartSql="\"%Y-%m\"";
                    groupBySql="DATE_FORMAT(ct, \"%Y-%m\" )";
                    dayStart.setMonth(dayStart.getMonth()-11);
                    //最近3年
                }else if(groupType==6){
                    ctFormartSql="\"%Y\"";
                    groupBySql="DATE_FORMAT(ct, \"%Y\" )";
                    //最近3年
                    dayStart.setYear(dayStart.getYear()-2);
                 //按门店
                }else if(groupType==7){

                }


                param.put("ctStart",TimeUtils.formatToTime(dayStart));
                param.put("ctEnd",TimeUtils.formatToTime(dayEnd));
                // List<Map<String,Object>>=reportMapper.sale(param);
                param.put("ctFormartSql",ctFormartSql);
                param.put("groupBySql",groupBySql);
                //构建X轴（日期）
                cts=reportMapper.sale_group_by(param);
                //获取个门店销售/采购数据
                param.clear();
                param.put("ctStart",TimeUtils.formatToTime(dayStart));
                param.put("ctEnd",TimeUtils.formatToTime(dayEnd));
                if(type!=0){
                    param.put("type",type);
                }
                //匹配消费者（积分），销售（门店），采购（门店/大客户）的ID集合
                List<KitchenOrder> orders  = reportMapper.select_order(param);

            }

        }

        result.put("shops",shops);
        result.put("cts",cts);
        return result;
    }

    /**
     * 查询采购订单
     * @param request
     * @return
     */
    public PageResult<Map<String,Object>> account(HttpServletRequest request) throws  Exception{
        Map<String, Object> param = ParamUtil.packageMysqlPageParam(request,"memberName");
        String ctStart = request.getParameter("ctStart");
        String ctEnd = request.getParameter("ctEnd");
        //如果ctStart和ctEnd为空，默认当前月
        Date now = new Date();
        if(StringUtils.isEmpty(ctStart)){
            now.setDate(1);
            ctStart=TimeUtils.formatToTime(DatetUtil.setDateStart(now));
        }else{
            ctStart=TimeUtils.formatToTime(DatetUtil.setDateStart(new SimpleDateFormat("yyyy-MM").parse(ctStart)));
        }
        param.put("ctStart",ctStart);
        Date now1= new Date();
        if(StringUtils.isEmpty(ctEnd)){
            now1.setDate(31);
            ctEnd=TimeUtils.formatToTime(DatetUtil.setDateEnd(now1));
        }else{
            ctEnd=TimeUtils.formatToTime(DatetUtil.setDateEnd(new SimpleDateFormat("yyyy-MM").parse(ctEnd)));
        }
        param.put("ctEnd",ctEnd);
        List<Map<String,Object>> result = reportMapper.account(param);
        Serializable serializable=reportMapper.account_count(param);
        long count =serializable==null?0:Long.valueOf(serializable.toString());
        return new PageResult<Map<String,Object>>(result,count);
    }



}
